home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / amok_lha / amok82.lha / Printf1.4 / Printf.s < prev    next >
Text File  |  1993-08-15  |  2KB  |  101 lines

  1.  
  2. ; :Program.       Printf.s
  3. ; :Author.        Volker Rudolph
  4. ; :Address.       Lettow-Vorbeck-Str. 11 / 6750 Kaiserslautern 26
  5. ; :Phone.         06301/8566
  6. ; :Version.       1.0
  7. ; :Date.          28.11.1989
  8. ; :Copyright.     PD
  9. ; :Language.      Assembler / Oberon
  10. ; :Translator.    A68k(Freeware) / Amiga-Oberon V1.17.1
  11. ; :Contents.      Allzweck-Textausgabe in Form der C-Funktion Printf
  12. ; :Usage.         Aufruf und Parameter wie in C
  13.  
  14.   XREF OberonLib.StackChk
  15.   XREF Printf_SPrintf,Printf.WriteProc
  16.   XDEF Printf.Printf0,Printf.Printf1,Printf.Printf2,Printf.Printf3,Printf.Printf4,
  17.   XDEF Printf.Printf5,Printf.Printf6
  18.  
  19. bufSize EQU 120                  ; Size of output-buffer
  20.  
  21.   SECTION Module,CODE
  22.  
  23. Printf.Printf0:
  24.   moveq   #0,d7
  25.   bra.s   Printf
  26.  
  27. Printf.Printf1:
  28.   moveq   #1,d7
  29.   bra.s   Printf
  30.  
  31. Printf.Printf2:
  32.   moveq   #2,d7
  33.   bra.s   Printf
  34.  
  35. Printf.Printf3:
  36.   moveq   #3,d7
  37.   bra.s   Printf
  38.  
  39. Printf.Printf4:
  40.   moveq   #4,d7
  41.   bra.s   Printf
  42.  
  43. Printf.Printf5:
  44.   moveq   #5,d7
  45.   bra.s   Printf
  46.  
  47. Printf.Printf6:
  48.   moveq   #6,d7
  49.   ;bra.s   Printf
  50.  
  51. Printf:                          ;d7: Anzahl Parameter
  52.   move.l  d7,d0
  53.   lsl.l   #2,d0
  54.   add.l   #bufSize+44,d1         ; 11 Register
  55.   jsr     OberonLib.StackChk
  56.  
  57.   movem.l d2-d7/a2-a6,-(sp)
  58.   lea.l   -bufSize(sp),sp
  59.   move.l  sp,d4                  ;d4: Ausgabe-Puffer
  60.  
  61.   move.l  d7,d0                  ;d0: Schleifen-Zähler
  62.   subq.l  #1,d0
  63.  
  64.   move.l  d7,d1                  ;d1: Kopier-Offset
  65.   lsl.l   #2,d1
  66.   move.l  d1,d2
  67.   add.l   #28+44+bufSize,d1      ; 28 = 4+3*(4+4)
  68.  
  69.   addq.l  #6,d2
  70.   move.l  d2,-(sp)
  71.  
  72.   moveq.l #bufSize-1,d3          ;Parameter für SPrintf(buffer,,,,) und
  73.  
  74.   move.l  d4,-(sp)               ;writeProc(buffer) auf den Stack legen
  75.   move.l  d3,-(sp)
  76.  
  77.   move.l  d4,-(sp)               ;writeProc(buffer) auf den Stack legen
  78.   move.l  d3,-(sp)
  79.  
  80.   move.l  0(sp,d1.l),-(sp)       ;str
  81.   move.l  4(sp,d1.l),-(sp)
  82.  
  83.   tst.l   d7
  84.   beq.s   noArgs
  85.  
  86. loop:
  87.   move.l  0(sp,d1.l),-(sp)
  88.   dbra    d0,loop
  89.  
  90. noArgs:
  91.   jsr     Printf_SPrintf         ;Sprintf aufrufen
  92.   jsr     Printf.WriteProc
  93.   move.l  (sp)+,d0
  94. ^  lea.l   bufSize(sp),sp
  95.   movem.l (sp)+,d2-d7/a2-a6
  96.   move.l  (sp)+,a0
  97.   add.l   d0,sp
  98.   jmp     (a0)
  99.  
  100.   END
  101.